草庐IT

C++ 运算符 [] 魔法

全部标签

c# - C# 中的反射和运算符重载

这是交易。我有一个程序将加载给定的程序集,解析所有类型及其成员并编译一个TreeView(非常类似于旧的MSDN站点),然后为TreeView中的每个节点构建HTML页面。它基本上采用给定的程序集,并允许用户为其创建自己的类似MSDN的库以用于文档目的。这是我遇到的问题:每当在定义的类中遇到运算符重载时,反射都会将其作为“MethodInfo”返回,名称设置为“op_Assign”或“op_Equality”。我希望能够捕获这些并正确列出它们,但我无法在返回的MethodInfo对象中找到任何内容以准确识别我正在查看的运算符。我绝对不想只捕获以“op_”开头的所有内容,因为那肯定(在某

c# - 扩展 C# 合并运算符

在我解释我想做什么之前,如果你看下面的代码,你会明白它应该做什么吗?(已更新-见下文)Console.WriteLine(Coalesce.UntilNull(getSomeFoo(),f=>f.Value)??"defaultvalue");C#已经有一个null合并运算符,它在简单对象上工作得很好,但如果您需要访问该对象的成员则无济于事。例如Console.WriteLine(getSomeString()??"default");效果很好,但在这里对您没有帮助:publicclassFoo{publicFoo(stringvalue){Value=value;}publicstr

c# - "IN"Linq 运算符

我在这里尝试使用EntityFramework在Linq中转换旧的原始Sql查询。它对项目集合使用IN运算符。查询是这样的:SELECTMembers.NameFROMMembersWHEREMembers.IDIN(SELECTDISTINCTManufacturerIDFROMProductsWHEREActive=1)ORDERBYMembers.NameASC由于子查询的返回不是单个字符串而是字符串集合,因此我不能使用String.Contains()方法。我想过做这样的事情:varactiveProducts=(fromproductsindb.ProductSetwhere

c# - 为什么在标志枚举中使用按位或运算符,其含义为 AND

这可能是一个简单的问题,但我仍然对决定使用按位OR的原因感到困惑。假设我有一个包含四个字段的A类:classA{privateintField1;privatestaticintField2;publicintField3;publicstaticintField4;}并使用反射获取字段:varfields=typeof(A).GetFields(BindingFlags.Public|BindingFlags.Static);如果你是Reflection的新手,不知道如何使用BindingFlags,你脑海中最初的逻辑思维是:此行将选择所有静态或公共(public)字段,因为使用了按

c# - 当我使用 is 运算符时,为什么 IL 代码中只有空检查?

我想知道运算符是如何在C#中实现的。我写了一个简单的测试程序(没什么特别的,只是为了演示目的):classBase{publicvoidDisplay(){Console.WriteLine("Base");}}classDerived:Base{}classProgram{staticvoidMain(string[]args){vard=newDerived();if(disBase){varb=(Base)d;d.Display();}}}查看生成的IL代码:.methodprivatehidebysigstaticvoidMain(string[]args)cilmanaged

c# - 运算符 '==' 不能应用于 linq to entity 中类型为 'System.Guid' 和 'string' 的操作数

我在linqtoentityframework代码下方收到此错误“运算符‘==’无法应用于‘System.Guid’和‘string’类型的操作数”。在下面的代码中,CustomerId是Guid,customerProfileId是字符串。varaccountQuery=fromCinCustomerModel.CustomerProfilewhereC.CustomerId==customerProfileId//ErrorhereselectC; 最佳答案 您不能直接将Guid与字符串进行比较。将字符串转换为Guid或将Gui

c# - 'await' 运算符只能与异步 lambda 表达式一起使用

这个问题在这里已经有了答案:The'await'operatorcanonlybeusedwithinanasynclambdaexpression(2个答案)关闭8年前。我正在尝试将文件列表复制到目录中。我正在使用异步/等待。但是我遇到了这个编译错误The'await'operatorcanonlybeusedwithinanasynclambdaexpression.Considermarkingthislambdaexpressionwiththe'async'modifier.我的代码是这样的asyncTaskCopyFilesToFolder(ListfileList,IPr

c# - 之前的 "new"运算符会怎样?

DispatcherTimerdt=newDispatcherTimer();dt.Interval=newTimeSpan(0,0,0,0,100);dt.Tick+=newEventHandler(dt_dt);我对new关键字有疑问。我有一个设置为间隔的DispatcherTimer。假设用户想要更改间隔。dt.Interval=newTimeSpan(0,0,0,0,50);那么,第一个newTimeSpan会发生什么?它还在那里吗?还是新的会覆盖旧的?我不这么认为。如果我想更改时间间隔,new关键字是否是声明新TimeSpan的唯一方法?我问这个,因为我不确定每次值更改时声明

c# - 三元运算符语法来选择接口(interface)的实现

这个问题在这里已经有了答案:Implicitconversionissueinaternarycondition[duplicate](4个答案)关闭8年前。我想知道为什么这行代码不能编译:ILogStuffLogger=(_logMode)?newLogToDisc():newLogToConsole();注意LogToDisc和LogToConsole都实现了ILogStuff,_logMode是一个bool变量。我收到的错误消息是:Error3:Typeofconditionalexpressioncannotbedeterminedbecausethereisnoimplici

c# - IS 运算符是否拆箱值类型?

我找不到以下问题的答案:objecto=10;//Boxinti=(int)o;//Unbox说的很清楚,下面的不清楚boolisInt=oisint;//Istheunboxhereornot? 最佳答案 不,这不是拆箱-它只是检查类型是否正确。不要忘记确实涉及到一个对象,它有一个类型。无论该值是否为装箱值类型值,检查该类型基本上都是相同的操作。(对于值类型或任何密封类型可能有一些优化是可行的,因为没有要考虑的继承,但从根本上说它仍在检查对象header的“类型”部分。)一种检查方法是编译代码并使用ILASM查看IL://obje